package com.mhy.netsafe.utils.glide;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.bumptech.glide.Glide;
import com.bumptech.glide.TransitionOptions;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.mhy.netsafe.R;
// 高斯模糊和圆角
import jp.wasabeef.glide.transformations.BlurTransformation;
import static com.bumptech.glide.request.RequestOptions.bitmapTransform;

/**
 * 类描述：Glide封装实体类
 * 作  者：mahongiyn
 * 时  间：2019-07-11
 * 修改备注：
 */
public class GlideUtil {
    private static int LoadingImg = R.drawable.banner_gray;
    private static int ErrorImg = R.drawable.ic_delete_photo;

    /**
     * 设置普通图片
     *
     * @param context
     * @param Url
     * @param iv
     * glide 4.9.0 可以直接配置圆形和圆角图片 transforms(new CircleCrop())
     * 渐变设置和监听设置有更改 Drawabl
     *  asBitmap() 需要设置在 load(url)之前
     */
    public static void ShowImage(Context context, String Url, ImageView iv) {
        Glide.with(context)
                .asBitmap() // 不显示gif图
                .load(Url).placeholder(LoadingImg).error(ErrorImg).into(iv);
    }

    /**
     * 设置圆角图片
     *
     * @param context
     * @param url
     * @param iv
     * @param rudius
     */
    public static void ShowRoundCornerImg(Context context, String url, ImageView iv, int rudius) {
        Glide.with(context).load(url).placeholder(LoadingImg).error(ErrorImg).transform(
                new GlideRoundTransform(rudius)
              // new RoundedCorners(rudius)  //Glide 4.9
        ).into(iv);
    }

    /**
     * 设置圆形图片
     *
     * @param context
     * @param url
     * @param iv
     */
    public static void ShowCircleImg(Context context, String url, ImageView iv) {
        Glide.with(context)
                .load(url)
                .placeholder(R.drawable.banner_gray)
                .error(R.drawable.ic_delete_photo)
                .transform(
                        new GlideCircleTransform()
//                        new CircleCrop()   //Glide 4.9
                )
                .into(iv);
    }
//圆形 自定义impic  .error(imgPic)
    public static void ShowCircleImg(Context context, String url, ImageView iv, int imgPic) {
        Glide.with(context)
                .load(url)
                .placeholder(imgPic)
                .error(imgPic)
                .transform(
                        new GlideCircleTransform()
//        new CircleCrop()   //Glide 4.9
                )
                .into(iv);
    }

    public static void setLoadingImg(int loadingImgId) {
        LoadingImg = loadingImgId;
    }

    /***
     * 完整设置示例
     */
    public static void ShowAll(Context context, String imageUrl, ImageView imageView,@NonNull TransitionOptions<?, ? > transitionOptions) {

        Glide.with(imageView.getContext())
                .asBitmap() // 不显示gif图
                .load(imageUrl)
//                .transition(DrawableTransitionOptions.withCrossFade(500)) // 渐变
                .placeholder(R.drawable.banner_gray)// 加载中图片
                .error(R.drawable.ic_delete_photo) // 加载失败图片
                .transforms(new CircleCrop()) // 圆形图片
                .transforms(new RoundedCorners(20)) // 圆角图片
                // 高斯模糊，参数1：模糊度；参数2：图片缩放x倍后再进行模糊
                .apply(bitmapTransform(new BlurTransformation(50, 8)))
//                .listener(new RequestListener<Drawable>() { // 加载监听
//                    @Override
//                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//                        return false;
//                    }
//
//                    @Override
//                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
//                        return false;
//                    }
//                })
                .into(imageView);
    }
}
